Cognito ユーザープール + ALB の認証に Okta で OpenID Connect (OIDC) 連携を追加してみた
ちゃだいん(@chazuke4649)です。
Amazon Cognito と Application Load Balancer を使用すると、AWSサービスだけで簡単に認証機能を実装できます。
前回、Cognito + ALB + Google認証を試したので、今回は、別のパターンを試します。
前回のエントリはこちらです。
今回は、前回のGoogle認証部分をOIDC認証で Okta に置き換えたバージョンとなります。下図が構成図となります。
こちらもやはり、Cognitoを経由せずに、直接 ALBの組み込み認証機能とOIDCとしてのGoogle認証するパターンと似ているので、混同にご注意ください。
作業手順
作業手順の概要としては、以下の5つを順番に行っていきます。
- Amazon Cognito ユーザープールを作成する
- Amazon Cognito ユーザープールを設定する
- ALBとCognitoを組み合わせた認証を設定する
- Okta(OIDC)を設定する
- Amazon Cognito ユーザープールにOIDC連携を追加する
1.2.3.については、前回紹介の下エントリにて紹介されていますので、今回は割愛し 4.5.からやってみたいと思います。
インフラエンジニアが一切コードを書かずにWebサーバーに認証機能を実装した話 | Developers.IO
ALB + Cognito認証で付与されるユーザー情報をEC2サイドから眺めてみる | Developers.IO
前提
よって、以下内容がすでに準備されている状態となります。
- Nginx on EC2 を構築済み
- ALBを構築済み
- Route 53、ACMを設定し、
https://www.chadain-test.com
にて、ALB 経由で nginx の管理者画面が表示される状態
やってみた
基本的には、以下公式ドキュメントを参考に進めていきます。
ユーザープールへの OIDC ID プロバイダーの追加 - Amazon Cognito
Amazon Cognito ユーザープールで、Okta を OIDC ID プロバイダーとして設定する
4.Okta(OIDC)を設定する
Okta のアカウントがない場合は、Okta Developer Editionのアカウントを次の URL から作成してください。(クレジットカードを登録せずに、無料でアカウント開設が可能)
https://developer.okta.com/quickstart/
Okta にサインインして、Developer Consoleの中から、[Classic UI]を選択します。
[Applications]を開きます。
[Add Application]を選択します。
[Create New App]を選択します。
Platformでは[Web]、Sign on methodでは[OpenID Connect]を選択し、作成します。
作成したAppの[General Settings]で以下の通り設定していきます。
- Application name: chadain-dev
- Login redirect URIs:
https:chadain-test.com/oauth2/idpresponse
※値はダミーです。oauth2/idpresponse
以外の部分は、Cognitoユーザープールの[Domain Name]で確認できます。
作成されたAppにて設定内容を見ていきます。
[Allowed Grant types]にて[Authrization Code]が選ばれていることを確認します。
[Client ID]と[Client secret]が発行されているので、これをメモしておきます。
次に[Sign On]のタブを開き、[Issuer]にあるURLもメモします。
[Assignments]にて、[Assign]を選択し、今回認証でログインしたいユーザーを登録します。(Oktaアカウント作成時に、ユーザーとして登録されているはずです)
これで、Okta側の設定は終了となります。
5.Amazon Cognito ユーザープールにOIDC連携を追加する
ここからはAWS側の作業となります。
Cognitoコンソールを開き、対象のユーザープールにて「IDプロバイダー」を開きます。
OpenID Connectを選択し、以下設定を追加します。
- プロバイダ名: Okta(任意の名称でOK)
- クライアントID: ※Oktaコンソールでメモした値を入力
- クライアントシークレット: ※Oktaコンソールでメモした値を入力
- 認証スコープ: email openid
- 発行者: ※Oktaコンソールでメモした値を入力
作成が完了すると、アクティブなOIDCプロバイダに追加されます。
「アプリクライアントの設定」を開き、以下項目を確認します。
- 有効なIDプロバイダ: Okta
- 許可されている OAuth フロー: Authorization Code Grant
- 許可されている認証スコープ: email openid
[属性マッピング]にて、以下項目を確認します。
- sub: Usernameを確認
- email: Emailを追加
以上で、Cognio の設定は完了です。
テストする
https://www.chadain-test.com
にアクセスすると、Cognito認証画面は以下のようになりました。
Oktaのボタンが追加されてますね!
Oktaボタンを押して、Okta認証画面にて、ユーザー名とパスワードを入力します。
そうすると無事、以下 Nginx の初期画面が表示されました!
終わりに
今回は前回のGoogle認証(ソーシャルサインイン)に引き続き、Okta認証(OIDC)を追加しました。
どちらも基本的にほとんど同じ部分を設定すれば連携できたので、とてもスムーズに実装することができました。
それではこの辺で。ちゃだいん(@chazuke4649)でした。